<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
	<th:block th:include="include :: header('新增定时任务')" />
</head>
<body class="white-bg">
	<div class="wrapper wrapper-content animated fadeInRight ibox-content">
		<form class="form-horizontal m" id="form-job-add">
		    <input type="hidden" name="createBy" th:value="${@permission.getPrincipalProperty('loginName')}">
			<div class="form-group">
				<label class="col-sm-3 control-label is-required">任务名称：</label>
				<div class="col-sm-8">
					<input class="form-control" type="text" name="jobName" id="jobName" required>
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-3 control-label">任务分组：</label>
				<div class="col-sm-8">
					<select name="jobGroup" class="form-control m-b" th:with="type=${@dict.getType('sys_job_group')}">
		                <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
		            </select>
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-3 control-label is-required">调用目标：</label>
				<div class="col-sm-8">
					类名：<select id="jobClasses" name="jobClass" class="form-control m-b">
						<option value="0">请选择</option>
					</select>
					方法：<select id="jobMethods" name="jobMethod" class="form-control m-b">
						<option value="0">请选择</option>
					</select>
				</div>
			</div>
			<div id="paramWrapper" class="form-group">
				<label class="col-sm-3 control-label is-required">方法参数：</label>
				<div class="col-sm-8">
					参数列表：<p id="params" class="m-b"></p>
					参数值：<input class="form-control" type="text" id="paramValue" name="paramValue"/>
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-3 control-label is-required">cron表达式：</label>
				<div class="col-sm-8">
					<input class="form-control" type="text" name="cronExpression" id="cronExpression" required>
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-3 control-label">执行策略：</label>
				<div class="col-sm-8">
					<label class="radio-box"> <input type="radio" name="misfirePolicy" value="1" th:checked="true"/> 立即执行 </label> 
					<label class="radio-box"> <input type="radio" name="misfirePolicy" value="2" /> 执行一次 </label> 
					<label class="radio-box"> <input type="radio" name="misfirePolicy" value="3" /> 放弃执行 </label>
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-3 control-label">并发执行：</label>
				<div class="col-sm-8">
					<label class="radio-box"> <input type="radio" name="concurrent" value="0"/> 允许 </label> 
					<label class="radio-box"> <input type="radio" name="concurrent" value="1" th:checked="true"/> 禁止 </label> 
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-3 control-label">状态：</label>
				<div class="col-sm-8">
				    <div class="radio-box" th:each="dict : ${@dict.getType('sys_job_status')}">
						<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:checked="${dict.default}">
						<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
					</div>
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-3 control-label">备注：</label>
				<div class="col-sm-8">
					<textarea id="remark" name="remark" class="form-control"></textarea>
				</div>
			</div>
		</form>
	</div>
	<th:block th:include="include :: footer" />
	<script type="text/javascript">
		var prefix = ctx + "monitor/job";
		var methodsParam = {};
		//获得可选类
		$.operate.get(prefix + "/classes",function(result){
			if (result.code === 0) {
				$("#jobClasses").html(createOptionsHtml(result));
				var className = $("#jobClasses option:selected").val();
				getMethods(className);
			}else{
				alert(result.msg);
			}
		});
		function createOptionsHtml(result,flag){
			var html="";
			if(result.data&&result.data.length>0){
				var defaultClass = flag==1?$("#jobClass").val():(flag==2?$("#jobMethod").val():"");
				for(var i = 0;i<result.data.length;i++){
					if(defaultClass==result.data[i]){
						html+="<option selected value='"+result.data[i]+"'>"+result.data[i]+"</option>";
					}else{
						html+="<option value='"+result.data[i]+"'>"+result.data[i]+"</option>";
					}
				}
			}
			return html;
		}
		//获得类下的可选方法
		function getMethods(className){
			$.operate.get(prefix + "/methods/"+className,function(result){
				if (result.code === 0) {
					methodsParam = result;
					$("#jobMethods").html(createMethodOptionsHtml(result));
					//获得参数列表
					flushShowParam(methodsParam);
				}else{
					alert(result.msg);
				}
			},false);
		}
		function createMethodOptionsHtml(result){
			var html="";
			if(result.data&&result.data.length>0){
				for(var i = 0;i<result.data.length;i++){
					html+="<option value='"+result.data[i].methodName+"'>"+result.data[i].methodName+"</option>";
				}
			}
			return html;
		}
		function getParams(result,methodName){
			var params="";
			if(result.data && result.data.length>0){
				for(var i = 0;i<result.data.length;i++){
					if(methodName==result.data[i].methodName){
						var paramTypes = result.data[i].paramTypes;
						if(paramTypes && paramTypes.length>0){
							for (var j=0;j<paramTypes.length;j++){
								params = params + paramTypes[j] + ",";
							}
							params = params.endsWith(",")?params.substr(0,params.length-1):params;
						}
					}
				}
			}
			return params;
		}
		function flushShowParam(result){
			//获得参数列表
			$("#params").text("");
			var params = getParams(result,$("#jobMethods option:selected").val());
			if(params){
				$("#paramWrapper").show();
				$("#params").text(params);
			}else{
				$("#paramWrapper").hide();
			}
		}
		$("#jobClasses").change(function(){
			var className = $("#jobClasses option:selected").val();
			getMethods(className);
		})
		$("#jobMethods").change(function(){
			flushShowParam(methodsParam);
		})
		$("#form-job-add").validate({
			onkeyup: false,
			rules:{
				cronExpression:{
					remote: {
	                    url: prefix + "/checkCronExpressionIsValid",
	                    type: "post",
	                    dataType: "json",
	                    data: {
	                        "cronExpression": function() {
	                            return $.common.trim($("#cronExpression").val());
	                        }
	                    },
	                    dataFilter: function(data, type) {
	                    	return data;
	                    }
	                }
				},
			},
			messages: {
	            "cronExpression": {
	                remote: "表达式不正确"
	            }
	        },
	        focusCleanup: true
		});
		
		function submitHandler() {
	        if ($.validate.form()) {
	        	$.operate.save(prefix + "/add", $('#form-job-add').serialize());
	        }
	    }
	</script>
</body>
</html>
